home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / php / pear / Payment_Clieop / clieop.php < prev   
PHP Script  |  2004-03-24  |  16KB  |  636 lines

  1. <?php
  2. /* vim: set expandtab tabstop=4 shiftwidth=4: */
  3. // +----------------------------------------------------------------------+
  4. // | PHP Version 4                                                        |
  5. // +----------------------------------------------------------------------+
  6. // | Copyright (c) 1997-2003 The PHP Group                                |
  7. // +----------------------------------------------------------------------+
  8. // | This source file is subject to version 2.0 of the PHP license,       |
  9. // | that is bundled with this package in the file LICENSE, and is        |
  10. // | available at through the world-wide-web at                           |
  11. // | http://www.php.net/license/2_02.txt.                                 |
  12. // | If you did not receive a copy of the PHP license and are unable to   |
  13. // | obtain it through the world-wide-web, please send a note to          |
  14. // | license@php.net so we can mail you a copy immediately.               |
  15. // +----------------------------------------------------------------------+
  16. // | Authors: Dave Mertens <dmertens@zyprexia.com>                        |
  17. // +----------------------------------------------------------------------+
  18. //
  19. // $Id: clieop.php,v 1.14 2003/01/28 14:29:52 zyprexia Exp $
  20. /*
  21.  Please note that public function names are partly in Dutch. This is because 
  22.  also the clieop data strings has a dutch names. (batchvoorloopinfo, transactieinfo, etc).
  23.  */
  24.  
  25. /**
  26. * Main clieop class
  27. *
  28. * @version $Revision: 1.14 $
  29. * @access public
  30. * @author Dave Mertens <dmertens@zyprexia.com>
  31. * @package Payment_Clieop
  32. */
  33. class ClieopPayment extends clieop_baseobject
  34. {
  35.     /**
  36.     * @var string
  37.     * @access private
  38.     */
  39.     var $_SenderIdent;
  40.  
  41.     /**
  42.     * @var string
  43.     * @access private
  44.     */
  45.     var $_FileIdent;
  46.  
  47.     /**
  48.     * @var string
  49.     * @access private
  50.     */
  51.     var $_TransactionType;
  52.  
  53.     /**
  54.     * @var string
  55.     * @access private
  56.     */
  57.     var $_ClieopText;
  58.  
  59.     /**
  60.     * @var string
  61.     * @access private
  62.     */
  63.     var $_PrincipalAccountNumber;
  64.  
  65.     /**
  66.     * @var string
  67.     * @access private
  68.     */
  69.     var $_PrincipalName;
  70.  
  71.     /**
  72.     * @var integer
  73.     * @access private
  74.     */
  75.     var $_BatchNumber;
  76.  
  77.     /**
  78.     * @var integer
  79.     * @access private
  80.     */
  81.     var $_TransactionCount;
  82.  
  83.     /**
  84.     * @var integer
  85.     * @access private
  86.     */
  87.     var $_TotalAmount;
  88.  
  89.     /**
  90.     * @var string
  91.     * @access private
  92.     */
  93.     var $_AccountChecksum;
  94.  
  95.     /**
  96.     * @var string
  97.     * @access private
  98.     */
  99.     var $_Description;
  100.  
  101.     /**
  102.     * @var date (in DDMMYY format)
  103.     * @access private
  104.     */
  105.     var $_ProcessDate;
  106.  
  107.     /**
  108.     * @var boolean
  109.     * @access private
  110.     */
  111.     var $_Test;
  112.  
  113.     /**
  114.     * @var string
  115.     * @access private
  116.     */
  117.     var $_TransactionText;
  118.  
  119.     /**
  120.     * Constructor for class
  121.     * @return void
  122.     * @access public
  123.     */
  124.     function clieopPayment()
  125.     {
  126.         //init vars
  127.         $this->_ProcessDate = "000000";    //process ASAP
  128.         $this->_BatchNumber = 1;
  129.         $this->_Test = "T";
  130.         return 1;
  131.     }
  132.  
  133.     /**
  134.     * Adds a payment record to the clieop file
  135.     * @param object paymentObject    - Instance of transactionPayment
  136.     * @access public
  137.     * @return void
  138.     */
  139.     function addPayment($paymentObject)
  140.     {
  141.         //Only one type of transaction is allowed in a clieop
  142.         if ($this->_TransactionType == $paymentObject->getPaymentType())
  143.         {
  144.             //transactieinfo (0100)
  145.             $text = $this->writeTransactieInfo($paymentObject->getTransactionType(),
  146.                 $paymentObject->getAmount(),
  147.                 $paymentObject->getAccountNumberSource(),
  148.                 $paymentObject->getAccountNumberDest());
  149.                 
  150.             // Debtor name ans city
  151.             if (strtoupper($this->_TransactionType) == "DEBTOR")
  152.             {
  153.                 //name of debtor (0110)
  154.                 $text .= $this->writeNaambetalerInfo($paymentObject->getName());
  155.  
  156.                 //city of debtor (0113)
  157.                 $text .= $this->writeWoonplaatsbetalerInfo($paymentObject->getCity());
  158.             }
  159.             
  160.             //betalings kenmerk (0150)
  161.             $text .= $this->writeBetalingskenmerkInfo($paymentObject->getInvoiceReference());
  162.             
  163.             //maximum 4 description lines (0160)
  164.             $descArray = $paymentObject->getDescription();
  165.             while(list($id,$desc) = each($descArray))
  166.             {    
  167.                 $text .= $this->writeOmschrijvingInfo($desc);    
  168.             }
  169.             
  170.             //routine splits here into creditor and debtor
  171.             if (strtoupper($this->_TransactionType) == "CREDITOR")
  172.             {
  173.                     //name of creditor (0170)
  174.                     $text .= $this->writeNaambegunstigdeInfo($paymentObject->getName());
  175.             
  176.                     //city of creditor (0173)
  177.                     $text .= $this->writeWoonplaatsbegunstigdeInfo($paymentObject->getCity());
  178.             }
  179.             
  180.             //do some calculations
  181.             $this->_NumberOfTransactions++;
  182.             //accoutnumber checksum
  183.             $this->_AccountChecksum += (int)$paymentObject->getAccountNumberSource() + (int)$paymentObject->getAccountNumberDest();
  184.             $this->_TotalAmount += $paymentObject->getAmount();
  185.         }
  186.         $this->_TransactionText .= $text;
  187.     }
  188.     
  189.     /**
  190.     * Writes complete clieop file
  191.     * @access public
  192.     * @return string
  193.     */
  194.     function writeClieop()
  195.     {
  196.         $text  = $this->writeBestandsvoorloopInfo($this->_SenderIdent, $this->_BatchNumber);
  197.         $text .= $this->writeBatchvoorloopInfo($this->_PrincipalAccountNumber, $this->_BatchNumber);
  198.         $text .= $this->writeVasteomschrijvingInfo($this->_FixedDescription);
  199.         $text .= $this->writeOpdrachtgeverInfo($this->_ProcessDate, $this->_PrincipalName);
  200.         $text .= $this->_TransactionText;
  201.         $text .= $this->writeBatchsluitInfo();
  202.         $text .= $this->writeBestandssluitInfo();
  203.         
  204.         //return clieop file
  205.         return $text;
  206.     }
  207.     
  208.     /**
  209.     * property BatchNumber
  210.     * @param integer Value    - Number of batches send to day (including this one)
  211.     * @return string
  212.     * @access public
  213.     */
  214.     function getBatchNumber()
  215.     {
  216.         return $this->_BatchNumber;
  217.     }
  218.     function setBatchNumber($Value)
  219.     {
  220.         $this->_BatchNumber = $Value;
  221.     }
  222.     
  223.     /**
  224.     * property FixedDescription
  225.     * @param string Value    - Description which will be added to each transaction payment
  226.     * @return string
  227.     * @access public
  228.     */
  229.     function getFixedDescription()
  230.     {
  231.         return $this->_FixedDescription;
  232.     }
  233.     function setFixedDescription($Value)
  234.     {
  235.         $this->_FixedDescription = $Value;
  236.     }
  237.     
  238.     /**
  239.     * property SenderIdentification
  240.     * @param string Value    - Identification of sender, free of choice
  241.     * @return string
  242.     * @access public
  243.     */
  244.     function getSenderIdentification()
  245.     {
  246.         return $this->_SenderIdent;
  247.     }
  248.     function setSenderIdentification($Value)
  249.     {
  250.         $this->_SenderIdent = $Value;
  251.     }
  252.     
  253.     /**
  254.     * property PrincipalName
  255.     * @param string Value    - Name of principal
  256.     * @return string
  257.     * @access public
  258.     */
  259.     function getPrincipalName()
  260.     {
  261.         return $this->_PrincipalName;
  262.     }
  263.     function setPrincipalName($Value)
  264.     {
  265.         $this->_PrincipalName = $Value;
  266.     }
  267.     
  268.     /**
  269.     * property PrincipalAccountNumber
  270.     * @param string Value    - Account number of principal
  271.     * @return string
  272.     * @access public
  273.     */
  274.     function getPrincipalAccountNumber()
  275.     {
  276.         return $this->_PrincipalAccountNumber;
  277.     }
  278.     function setPrincipalAccountNumber($Value)
  279.     {
  280.         $this->_PrincipalAccountNumber = $Value;
  281.     }
  282.     
  283.     /**
  284.     * property TransactionType
  285.     * @param string Value    - transaction type
  286.     * @return string
  287.     * @access public
  288.     */
  289.     function getTransactionType()
  290.     {
  291.         return $this->_TransactionType;
  292.     }
  293.     function setTransactionType($Value)
  294.     {
  295.         switch($Value)
  296.         {
  297.             case "00":    //BETALING
  298.                 $this->_TransactionType = "CREDITOR";
  299.                 $this->_TransactionCode = "00";
  300.                 break;
  301.             case "10":    //INCASSO
  302.                 $this->_TransactionType = "DEBTOR";
  303.                 $this->_TransactionCode = "10";
  304.                 break;
  305.         }
  306.     }
  307.     
  308.     /**
  309.     * property Test
  310.     * @param boolean Value    - true = test clieop, false = production clieop
  311.     * @return string
  312.     * @access public
  313.     */
  314.     function getTest()
  315.     {
  316.         return $this->_Test;
  317.     }
  318.     function setTest($Value)
  319.     {
  320.         if ($Value == false)
  321.             $this->_Test = "P";    //production clieop
  322.         else
  323.             $this->_Test = "T";    //test clieop
  324.     }
  325.         
  326.     
  327.     /**
  328.     * INFOCODE: 0100
  329.     * Writes transaction header
  330.     * @param string transType            - Type of transaction ('0000' for betaling, '1002' for incasso)
  331.     * @param integer amount                - Payment amount in Eurocents
  332.     * @param string accountNumberSource    - Source bankaccount number 
  333.     * @param string accountNumberDest    - Destination bankaccount number
  334.     * @access private
  335.     * @return string
  336.     */
  337.     function writeTransactieInfo($transType, $amount, $accountNumberSource, $accountNumberDest)
  338.     {
  339.         $text  = "0100";                                        //infocode
  340.         $text .= "A";                                            //variantcode
  341.         $text .= $this->numFiller($transType, 4);                //transactiesoort
  342.         $text .= $this->numFiller($amount, 12);                    //Bedrag
  343.         $text .= $this->numFiller($accountNumberSource, 10);    //Reknr betaler
  344.         $text .= $this->numFiller($accountNumberDest, 10);        //Reknr begunstigde
  345.         $text .= $this->filler(9);
  346.         
  347.         //return clieop line
  348.         return $text;
  349.     }
  350.     
  351.     /**
  352.     * INFOCODE: 0150
  353.     * Writes invoice reference clieop line
  354.     * @param string invoiceReference    - Reference of invoice
  355.     * @access private
  356.     * @return string
  357.     */
  358.     function  writeBetalingskenmerkInfo($invoiceReference)
  359.     {
  360.         $text  = "0150";                                    //infocode
  361.         $text .= "A";                                        //variantcode
  362.         $text .= $this->alfaFiller($invoiceReference, 16);    //betalings kenmerk
  363.         $text .= $this->filler(29);
  364.         
  365.         //return clieop line
  366.         if (strlen($invoiceReference) > 0) return $text;    //only return string if there's really a value
  367.     }    
  368.  
  369.     /**
  370.     * INFOCODE: 0160
  371.     * Writes an description for the clieop file
  372.     * @param string description    - Description of payment (Can be called maximum 4 times!)
  373.     * @access private
  374.     * @return string
  375.     */
  376.     function writeOmschrijvingInfo($description)
  377.     {
  378.         $text  = "0160";                                    //infocode
  379.         $text .= "A";                                        //variantcode
  380.         $text .= $this->alfaFiller($description, 32);        //omschrijving van post
  381.         $text .= $this->filler(13);
  382.         
  383.         //return clieop line
  384.         return $text;
  385.     }
  386.     
  387.     /**
  388.     * INFOCODE: 0170
  389.     * Write the creditor name record 
  390.     * @param string name     - Name of creditor
  391.     * @access private
  392.     * @return string
  393.     */
  394.     function writeNaambegunstigdeInfo($name)
  395.     {
  396.         $text  = "0170";                                    //infocode
  397.         $text .= "B";                                        //variantcode
  398.         $text .= $this->alfaFiller($name, 35);                //naam begunstigde
  399.         $text .= $this->filler(10);
  400.         
  401.         //reurn clieop line
  402.         return $text;
  403.     }
  404.  
  405.     /**
  406.     * INFOCODE: 0173
  407.     * Write the creditor city record 
  408.     * @param string city     - City of creditor
  409.     * @access private
  410.     * @return string
  411.     */
  412.     function writeWoonplaatsbegunstigdeInfo($city)
  413.     {
  414.         $text  = "0173";                                    //infocode
  415.         $text .= "B";                                        //variantcode
  416.         $text .= $this->alfaFiller($city, 35);                //woonplaats begunstigde
  417.         $text .= $this->filler(10);
  418.         
  419.         //reurn clieop line
  420.         return $text;
  421.     }
  422.     /**
  423.     * INFOCODE: 0110
  424.     * Write the debtor name record 
  425.     * @param string name     - Name of debtor
  426.     * @access private
  427.     * @return string
  428.     */
  429.     function writeNaambetalerInfo($name)
  430.     {
  431.         $text  = "0110";                                    //infocode
  432.         $text .= "B";                                        //variantcode
  433.         $text .= $this->alfaFiller($name, 35);                //naam betaler
  434.         $text .= $this->filler(10);
  435.         
  436.         //reurn clieop line
  437.         return $text;
  438.     }
  439.  
  440.     /**
  441.     * INFOCODE: 0113
  442.     * Write the debtor city record 
  443.     * @param string city     - City of debtor
  444.     * @access private
  445.     * @return string
  446.     */
  447.     function writeWoonplaatsbetalerInfo($city)
  448.     {
  449.         $text  = "0113";                                    //infocode
  450.         $text .= "B";                                        //variantcode
  451.         $text .= $this->alfaFiller($city, 35);                //woonplaats betaler
  452.         $text .= $this->filler(10);
  453.         
  454.         //reurn clieop line
  455.         return $text;
  456.     }
  457.     
  458.     /**
  459.     * INFOCODE: 0001
  460.     * Write clieop header 
  461.     * @param string identifier    - 5 char sender identification (free of choice)
  462.     * @param integer batchCount    - Numbers of clieop batches send today + 1
  463.     * @access private
  464.     * @return string
  465.     */
  466.     function writeBestandsvoorloopInfo($identifier, $batchCount)
  467.     {
  468.         $text  = "0001";                                        //infocode
  469.         $text .= "A";                                            //variantcode
  470.         $text .= date("dmy");                                    //aanmaak datum
  471.         $text .= "CLIEOP03";                                    //bestands naam
  472.         $text .= $this->alfaFiller($identifier, 5);                //afzender identificatie
  473.         $text .= date("d") . $this->numFiller($batchCount, 2);    //bestands identificatie 
  474.         $text .= "1";                                            //duplicaat code
  475.         $text .= $this->filler(21);    
  476.         
  477.         //return cliep line
  478.         return $text;
  479.     }
  480.     
  481.     /**
  482.     * INFOCODE: 9999
  483.     * Write clieop footer 
  484.     * @access private
  485.     * @return string
  486.     */
  487.     function writeBestandssluitInfo()
  488.     {
  489.         $text  = "9999";                                    //infocode
  490.         $text .= "A";                                        //variantcode
  491.         $text .= $this->filler(45);
  492.         
  493.         //return cleip line
  494.         return $text;
  495.     }
  496.     
  497.     /**
  498.     * INFOCODE: 0010
  499.     * Write clieop batchvoorloopinfo
  500.     * @param string principalAccountNumber    - Account number of principal
  501.     * @param integer batchCount                - Number of batches send this month (including this one) 
  502.     * @access private
  503.     * @return string
  504.     */
  505.     function writeBatchvoorloopInfo($principalAccountNumber, $batchCount)
  506.     {    
  507.         $text  = "0010";                                        //infocode
  508.         $text .= "B";                                            //variantcode
  509.         $text .= $this->numFiller($this->_TransactionCode, 2);    //transactiegroep (00 = betaling, 10 = incasso)
  510.         $text .= $this->numFiller($principalAccountNumber, 10);    //rekening nummer opdrachtgever
  511.         $text .= $this->numFiller($batchCount, 4);                //batch volgnummer
  512.         $text .= "EUR";                                            //aanlevering muntsoort
  513.         $text .= $this->filler(26);
  514.         
  515.         //return clieop line
  516.         return $text;
  517.     }
  518.     
  519.     /**
  520.     * INFOCODE: 0020
  521.     * Write clieop batchvoorloopinfo
  522.     * @access string description    - Fixed description for all payments
  523.     * @access private
  524.     * @return string
  525.     */
  526.     function writeVasteomschrijvingInfo($description)
  527.     {
  528.         $text  = "0020";                                        //infocode
  529.         $text .= "A";                                            //variantcode
  530.         $text .= $this->alfaFiller($description, 32);            //vaste omschrijving
  531.         $text .= $this->filler(13);
  532.         
  533.         //return clieop line
  534.         if (strlen($description) > 0) return $text;                //only return string if there is REALLY a description
  535.     }
  536.  
  537.     /**
  538.     * INFOCODE: 0030
  539.     * Write opdrachtegever clieop line
  540.     * @param date processDate        - Process date in DDMMYY-format
  541.     * @param string principalName    - Name of pricipal
  542.     * @access private
  543.     * @return string
  544.     */
  545.     function writeOpdrachtgeverInfo($processDate, $principalName)
  546.     {
  547.         $text  = "0030";                                        //infocode
  548.         $text .= "B";                                            //variantcode
  549.         $text .= "1";                                            //NAWcode
  550.         $text .= $this->numFiller($processdate, 6);                //verwerkings datum
  551.         $text .= $this->alfaFiller($principalName, 35);            //naam opdracht gever
  552.         $text .= $this->_Test;                                    //TESTcode (T = Test, P = Productie)
  553.         $text .= $this->filler(2);
  554.         
  555.         //return clieop line
  556.         return $text;
  557.     }
  558.     
  559.     /**
  560.     * INFOCODE: 9990
  561.     * Write clieop batchsluitinfo
  562.     * @access private
  563.     * @return string
  564.     */
  565.     function writeBatchsluitInfo()
  566.     {
  567.         $text  = "9990";                                            //infocode
  568.         $text .= "A";                                                //variantcode
  569.         $text .= $this->numFiller($this->_TotalAmount, 18);            //Totaalbedrag clieop
  570.         $text .= $this->numFiller($this->_AccountChecksum, 10);        //checksum van rekeningnummers
  571.         $text .= $this->numFiller($this->_NumberOfTransactions, 7);    //Aantal transactie posten
  572.         $text .= $this->filler(10);
  573.         
  574.         //return clieop line
  575.         return $text;
  576.     }
  577. }
  578.  
  579.  
  580. /**
  581. *    master object for clieop objects
  582. *
  583. * @version $Revision: 1.14 $
  584. * @access private
  585. * @author Dave Mertens <dmertens@zyprexia.com>
  586. * @package Payment_Clieop
  587. */
  588. class clieop_baseobject
  589. {
  590.  
  591.     /**
  592.     * Alfa numeric filler
  593.     * @param string text    - Text which needs to filled up
  594.     * @param integer length    - The length of the required text
  595.     * @return string
  596.     * @access public
  597.     */
  598.     function alfaFiller($text, $length)
  599.     {
  600.         //how many spaces do we need?
  601.         $alfaLength = abs($length - strlen($text));
  602.         
  603.         //return string with spaces on right side
  604.         return substr($text . str_repeat(" ", $alfaLength), 0, $length);
  605.     }
  606.     
  607.     /**
  608.     * Numeric filler
  609.     * @param string number    - number which needs to filled up (Will be converted to a string)
  610.     * @param integer length    - The length of the required number
  611.     * @return string
  612.     * @access public
  613.     */
  614.     function numFiller($number, $length)
  615.     {
  616.         //how many zeros do we need
  617.         settype($number, "string");        //We need to be sure that number is a string. 001 will otherwise be parsed as 1
  618.         $numberLength = abs($length - strlen($number));
  619.         
  620.         //return original number woth zeros on the left
  621.         return substr(str_repeat("0", $numberLength) . $number, -$length);
  622.     }
  623.     
  624.     /**
  625.     * filler
  626.     * @param integer length    - How many filler spaces do we need
  627.     * @return string
  628.     * @access public
  629.     */
  630.     function filler($Length)
  631.     {
  632.         return str_repeat(" ", $Length) . "\n";
  633.     }
  634. }
  635.  
  636. ?>